#import <UIKit/UIKit.h>

/**
 *  对MJRefresh的二次封装，使用时首先设置代理，然后实现协议方法
    - (void)tableViewWillRefreshHeader:(UITableView *)tableView;
    - (void)tableViewWillRefreshFooter:(UITableView *)tableView;
    这两个方法中分别要写下拉刷新要执行的逻辑和上拉加载的逻辑。
 
    执行逻辑：
    1.当第一次加载时，不会首先添加footer，而是等待数据接收下来时，再决定是不是需要添加footer，
    需要在解析数据完成的时候，即将数据模型添加到数据源数组后，调用这个方法
    - (void)resetFooterWithCountOfResponse:(NSInteger)responseCount countOfdataArray:(NSInteger)count rows:(NSInteger)rows;
 
    2.当上拉加载时，会临时隐藏header;
 
    3.可以添加无数据提示视图和无网络数据视图，具体视图的样式需要根据需求手动实现，在适当的地方调用这两个方法，不需要手动移除;
    - (void)addNoDataView;
    - (void)addErrorView;
 
    4.以上都是我瞎编的;
 */
@protocol RefreshDelegate <NSObject>

- (void)tableViewWillRefreshHeader:(UITableView *)tableView;
- (void)tableViewWillRefreshFooter:(UITableView *)tableView;

@end

@interface UITableView (Refresh)

@property (nonatomic, assign) id<RefreshDelegate> refreshDelegate;
@property (nonatomic, strong) UIView          *noDataView;
@property (nonatomic, strong) UIView          *errorView;
/// 添加上拉加载和下拉刷新，协议名称 TTTableViewDelegate
- (void)addRefresh;
/// 添加下拉刷新
- (void)addHeader;
/// 添加上拉加载
- (void)addFooter;
/// 移除上拉加载
- (void)removeFooter;
/// 开始刷新
- (void)beginRefreshing;
/// 停止刷新
- (void)endRefreshing;
/// 当没有数据的时候添加显示没有数据的视图
- (void)addNoDataView;
/// 移除没有数据的试图
- (void)removeNoDataView;
/// 当网络错误的时候添加显示没有数据的视图
- (void)addErrorView;
/// 移除网络错误的试图
- (void)removeErrorView;
/**
 *  重新设置控件，用于数据加载完毕后，是否移除Footer
 *
 *  @param responseCount 请求下来数据的数量
 *  @param count         数据源中数据的数量
 *  @param rows          每次请求下来的数量
 */
- (void)resetFooterWithCountOfResponse:(NSInteger)responseCount
                      countOfdataArray:(NSInteger)count
                                  rows:(NSInteger)rows;

@end
